package com.sangeng.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.sangeng.domain.ResponseResult;
import com.sangeng.domain.entity.Menu;
import com.sangeng.domain.vo.MenuListVo;
import com.sangeng.domain.vo.MenuTreeListCheckedVo;
import com.sangeng.domain.vo.MenuTreeListVo;
import com.sangeng.domain.vo.MenuUpdateVo;

import java.util.List;


/**
 * 菜单权限表(Menu)表服务接口
 *
 * @author makejava
 * @since 2023-10-09 20:26:06
 */
public interface MenuService extends IService<Menu> {
    /**
     * 根据用户id查询权限信息
     * @param id
     * @return
     */

    List<String> selectPermsByUserId(Long id);
    /**
     * 获取动态路由表：父子菜单
     * @return
     */

    List<Menu> selectRouterMenuTreeByUserId(Long userId);
    /**
     * 需要展示菜单列表，不需要分页。
     可以针对菜单名进行模糊查询
     也可以针对菜单的状态进行查询。
     菜单要按照父菜单id和orderNum进行排序
     * @param status
     * @param menuName
     * @return
     */
    ResponseResult<List<MenuListVo>> selectMenuList(Character status, String menuName);
    /**
     * 新增菜单
     * @param menu
     * @return
     */

    ResponseResult saveData(Menu menu);
    /**
     * 根据id查询菜单表
     * @param id
     * @return
     */

    ResponseResult<MenuUpdateVo> getMenuById(Long id);
    /**
     * 更新数据
     * @param menu
     * @return
     */

    ResponseResult updateData(Menu menu);
    /**
     * 能够删除菜单，但是如果要删除的菜单有子菜单则提示：存在子菜单不允许删除 并且删除失败。
     * @param menuId
     * @return
     */

    ResponseResult deleteDataById(Long menuId);
    /**
     * 获取菜单的列表树
     * @return
     */

    ResponseResult<List<MenuTreeListVo>> getMenuTreeList();
    /**
     * 根据角色id查询权限树列表
     * @param id
     * @return
     */

    ResponseResult<MenuTreeListCheckedVo> getRoleMenuTreeList(Long id);
}
